<!--"$Id: 3.0.55.html,v 1.5 2007/05/17 18:17:18 bostic Exp $ (Sleepycat) $Date: 2007/05/17 18:17:18 $"-->
<html>
<head>
<title>The Berkeley DB Package: DB 3.0.55 Change Log</title>
<meta name="description" content="Berkeley DB: A database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods">
</head>
<body bgcolor=white>

<h3 align=center>Berkeley DB 3.0.55 Change Log</h3>

<h3>Database On-Disk Format Changes:</h3>
<ol>
<li>The on-disk Btree/Recno format has changed from version 6 to version
7, and the on-disk Hash format has changed from version 5 to version 6.
For information on upgrading database formats, see section 3.3, "Upgrading
databases" in the Berkeley DB Reference Guide
</ol>

<h3>Major New Features:</h3>
<ol>
<li>A new Access Method has been added to Berkeley DB: the Queue Access
Method.  The Queue Access Method is similar to the Recno Access Method,
but is implemented to provide significantly higher-concurrency
queue-oriented append and consume operations.
<li>Berkeley DB now supports multiple databases (subdatabases) per
physical file.
<li>Berkeley DB now supports standard POSIX pthread, UI thread and Solaris
LWP mutexes.
<li>Database creation and removal are now optionally transaction protected.
<li>Berkeley DB now includes a complete Tcl API.
<li>Berkeley DB now optionally creates dynamic shared libraries.
</ol>

<h3>Interface Changes:</h3>
<ol>
<li>The Berkeley DB interfaces have been reworked in the 3.0.55 release
for two reasons.  The goals were as follows: to make the Berkeley DB
structures opaque so future releases of Berkeley DB can be binary
compatible with each other, provide enhanced error checking and reporting
during Berkeley DB environment and database configuration and creation,
provide configurability throughout the lifetime of the environment and
database, and to make the Berkeley DB interfaces consistent across the
C++, C and Java APIs.

<p>
While the C API changes are extensive, they are also simple to understand.
No functionality was removed.  The changes required comparatively few
modifications to the C++ and Java APIs, mostly limited to moving methods
among classes and the addition of a new flag value to a few interfaces.
For specific instructions on upgrading Berkeley DB 2.X applications to
this release, see the "Upgrading Berkeley DB 2.X.X applications to
Berkeley DB 3.0" chapter in the Berkeley DB Reference Guide.

<p>
The following individual changes are all part of this larger change.

<h4>Function changes:</h4>
<ol type=a>
<li>The db_appinit and db_appexit functions have been replaced by the
db_env_create function and the DBENV-&gt;open and DBENV-&gt;close methods.  The
db_open function has been removed, replaced by the db_create function and
the DB-&gt;open method.  Berkeley DB environments are now created using the
db_env_create function followed by methods on the handle it returns.
Berkeley DB databases are now created using the db_create function
followed by methods on the handle it returns.

<li>The lock_open, lock_close and lock_unlink functions have been
replaced by the db_env_create function and the DBENV-&gt;open, DBENV-&gt;close
and DBENV-&gt;remove methods.  The remaining lock subsystem functions now
take a DBENV handle as their first argument instead of a DB_LOCKTAB
handle.

<li>The log_open, log_close and log_unlink functions have been replaced
by the db_env_create function and the DBENV-&gt;open, DBENV-&gt;close and
DBENV-&gt;remove methods.  The remaining log subsystem functions now take a
DBENV handle as their first argument instead of a DB_LOG handle.

<li>The memp_open, memp_close and memp_unlink functions have been replaced
by the db_env_create function and the DBENV-&gt;open, DBENV-&gt;close and
DBENV-&gt;remove methods.  The remaining shared memory buffer pool functions
now take a DBENV handle as their first argument instead of a DB_MPOOL
handle.

<li>The txn_open, txn_close and txn_unlink functions have been replaced
by the db_env_create function and the DBENV-&gt;open, DBENV-&gt;close and
DBENV-&gt;remove methods.  The remaining transaction subsystem functions now
take a DBENV handle as their first argument instead of a DB_TXNMGR handle.

<li>The db_jump_set and db_value_set functions have been replaced by
methods on the DBENV handle.

<li>The db_xa_open routine has been replaced by a new flag, DB_XA_CREATE,
which is passed to the db_create function.

</ol>

<h4>DBENV structure changes:</h4>
<ol type=a>

<li>The db_errcall, db_errfile, db_errpfx and db_paniccall fields of the
DBENV structure have been deprecated and their functionality replaced by
the DBENV-&gt;set_errcall, DBENV-&gt;set_errfile, DBENV-&gt;set_errpfx and
DBENV-&gt;set_paniccall methods.

<li>The db_verbose field of the DBENV structure has been replaced by the
DBENV-&gt;set_verbose method.

<li>The lk_conflicts, lk_detect, lk_max and lk_modes fields of the DBENV
structure have been replaced by the DBENV-&gt;set_lk_conflicts,
DBENV-&gt;set_lk_detect and DBENV-&gt;set_lk_max methods.

<li>The lg_max field of the DBENV structure has been replaced by the
DBENV-&gt;set_lg_max method.

<li>The mp_mmapsize and mp_size fields of the DBENV structure have been
replaced by the DBENV-&gt;set_cachesize and DBENV-&gt;set_mp_mmapsize methods.

<li>The tx_info, tx_max and tx_recover fields of the DBENV structure have
been replaced by the DBENV-&gt;set_tx_max and DBENV-&gt;set_tx_recover methods.

<li>The (unused) DBENV-&gt;db_lorder field has been deleted.
</ol>

<h4>DB structure changes:</h4>
<ol type=a>

<li>The byteswapped field of the DB structure has been replaced by the
DB-&gt;get_byteswapped method.

<li>The db_errcall, db_errfile, db_errpfx and db_paniccall fields of the
DB structure have been deprecated and their functionality replaced by the
DB-&gt;set_errcall, DB-&gt;set_errfile, DB-&gt;set_errpfx and DB-&gt;set_paniccall
methods.

<li>The type field of the DB structure has been replaced by the
DB-&gt;get_type method.
</ol>

<h4>DBINFO structure changes:</h4>
<ol type=a>

<li>The bt_compare field of the DB structure has been replaced by the
DB-&gt;set_bt_compare method.

<li>The bt_minkey field of the DB structure has been replaced by the
DB-&gt;set_bt_minkey method.

<li>The bt_prefix field of the DB structure has been replaced by the
DB-&gt;set_bt_prefix method.

<li>The db_cachesize field of the DB structure has been replaced by the
DB-&gt;set_cachesize method.

<li>The db_lorder field of the DB structure has been replaced by the
DB-&gt;set_lorder method.

<li>The db_malloc field of the DB structure has been replaced by the
DB-&gt;set_malloc method.

<li>The db_pagesize field of the DB structure has been replaced by the
DB-&gt;set_pagesize method.

<li>The dup_compare field of the DB structure has been replaced by the
DB-&gt;set_dupcompare method.

<li>The flags field of the DB structure has been replaced by the
DB-&gt;set_flags method.

<li>The h_ffactor field of the DB structure has been replaced by the
DB-&gt;set_h_ffactor method.

<li>The h_hash field of the DB structure has been replaced by the
DB-&gt;set_h_hash method.

<li>The h_nelem field of the DB structure has been replaced by the
DB-&gt;set_h_nelem method.

<li>The re_delim field of the DB structure has been replaced by the
DB-&gt;set_re_delim method.

<li>The re_len field of the DB structure has been replaced by the
DB-&gt;set_re_len method.

<li>The re_pad field of the DB structure has been replaced by the
DB-&gt;set_re_pad method.

<li>The re_source field of the DB structure has been replaced by the
DB-&gt;set_re_source method.
</ol>

<p>
<li>The use of the POSIX EAGAIN error return to indicate deadlock has been
replaced with the Berkeley DB specific error DB_LOCK_DEADLOCK.  Note: this
change could potentially cause subtle errors.  Programs must be updated or
the Berkeley DB distribution altered for programs to run correctly.  See
the "Upgrading Berkeley DB 2.X.X applications to Berkeley DB 3.0" chapter
in the Berkeley DB Reference Guide for more information.

<li>The DB_RMW flag to the DB-&gt;cursor method has been renamed to be
DB_WRITECURSOR (note, this change is applicable only to the Berkeley DB
Concurrent Data Store product).

<li>The DB_LOCK structure is no longer a simple integer value.  For this
reason, the DB_LOCK argument to the lock_put interface has been changed
to be a reference to a DB_LOCK structure instead of the DB_LOCK structure
itself.

<li>The db_home argument to the environment creation function
(historically db_appinit, now DBENV-&gt;open) now overrides the DB_HOME
environment variable; this is necessary so that the -h option to the
various Berkeley DB utilities can override the user's environment.

<li>A mode argument was added to the environment creation function
(historically db_appinit, now DBENV-&gt;open) to allow applications to
specify the mode of files created in the Berkeley DB environment.

<li>The DB_LOCKDOWN flag was added to enable applications to attempt to
lock shared memory regions into physical memory.

</ol>

<h3>General Environment Changes:</h3>
<ol>

<li>A new flag has been added to the DBENV-&gt;open method, DB_SYSTEM_MEM.
This flag causes Berkeley DB to attempt to allocate memory for its shared
regions from system shared memory.  This flag supports functionality
similar to that previously provided by the DB_REGION_ANON and
DB_REGION_NAME flags to the db_value_set interface.

<li>A new flag has been added to the DBENV-&gt;open method, DB_PRIVATE.  This
flag causes Berkeley DB to attempt to allocate memory for its shared
regions from the heap and to assume that only inter-thread mutexes are
required, and not inter-process ones as well.  This flag is a superset of
the functionality previously provided by the DB_MPOOL_PRIVATE flag to the
memp_open interface.

<li>There is a new DBENV method, DBENV-&gt;remove, that removes entire
Berkeley DB environments.

<li>There are two new methods, DBENV-&gt;set_feedback and DB-&gt;set_feedback,
that allow applications to specify a callback function that is to be
called with periodic progress updates on various Berkeley DB operations.

<li>There is a new DBENV method, DBENV-&gt;set_recovery_init, that allows
applications to install application-specific recovery functions before
Berkeley DB performs recovery.

<li>There is a new DBENV method, DBENV-&gt;set_verbose, that allows
applications to request verbose information from the Berkeley DB library.

<li>The Berkeley DB 3.0.55 release includes enhanced functionality for
reporting Berkeley DB returned errors.  There are two new DBENV methods,
DBENV-&gt;err and DBENV-&gt;errx, and two new DB methods, DB-&gt;err and DB-&gt;errx,
which allow applications to format and report Berkeley DB error returns
using any of the historic output channels.  There is an additional
function, db_strerror, which is a superset of the ANSI C standard strerror
function, providing error strings for both the Berkeley DB errors and
underlying system errors.

<li>There is a new DBENV method, DBENV-&gt;set_lg_bsize, that allows
applications to specify the size of the in-memory log buffer.

<li>Reduce the number of file descriptors used to support fcntl locking
from one-per-region to a single one.

<li>Rename the filesystem representations of the Berkeley DB library's
shared regions.

<li>Rename temporary files created by Berkeley DB from just a printable
representation of the process ID to "BDB" followed by a printable
representation of the process ID.

<li>Return an error if environment interfaces called without initial
environment configuration.

<li>Fix a bug where Concurrent Data Store accepted incorrect flags,
for example, DB_RECOVERY.

<li>Fix a bug where specifying any one-character directory in the
db_config argument or other related configuration interface would fail.

<li>Fix a bug where recovery could fail if only a single checkpoint
had ever been written.

<li>Fix a bug where threads could race when regions were grown.  Because
there exist systems where mutexes cannot be unmapped and then remapped
back into application memory, the functionality to grow regions has been
removed from the Berkeley DB 3.0.55 release.  This means that selecting a
correct initial region size (for example, based on the number of active
transactions) is more important than before.  To facilitate this, region
high-water marks have been added to the region statistics where
appropriate.

</ol>

<h3>General Access Method Changes:</h3>
<ol>

<li>There is a new DB method, DB-&gt;remove, that deletes a database in a
transaction-protected operation.

<li>There is a new DB method, DB-&gt;upgrade, that upgrades the on-disk
format of an underlying database.

<li>There is a new DB method, DB-&gt;set_realloc, that allows applications
to specify a local memory reallocation function similarly to the
previously available DB-&gt;set_malloc functionality.

<li>The DB-&gt;open method supports a new flag, DB_EXCL, which behaves
similarly to the POSIX O_EXCL system open call flag.

<li>The Berkeley DB 3.0.55 release includes enhanced functionality for
reporting Berkeley DB returned errors.  There are two new DBENV methods,
DBENV-&gt;err and DBENV-&gt;errx, and two new DB methods, DB-&gt;err and DB-&gt;errx,
which allow applications to format and report Berkeley DB error returns
using any of the historic output channels.  There is an additional
function, db_strerror, which is a superset of the ANSI C standard strerror
function, providing error strings for both the Berkeley DB errors and
underlying system errors.

<li>The last two arguments to the DB-&gt;join method were reversed for
consistency with the rest of the Berkeley DB interfaces taking cursor
references and flags arguments.

<li>A cursor duplication method has been added to the DBcursor handle.
This method can be used to duplicate a cursor's transaction and locker
ID, and, optionally, to duplicate its position in the database.  This
change adds useful functionality, and more importantly makes it possible
to write
applications that both use locking without transactions and have multiple
cursors in the same thread of control.

<li>There is a new DBT structure flag, DB_DBT_REALLOC, that allows
threaded applications to re-use a single piece of memory for
multiple Berkeley DB retrievals, similarly to the DB_DBT_MALLOC flag.

<li>Enhance in-memory databases so that operations on them may be
transaction protected.  Fix a bug where specifying logging and
transactions on an in-memory database could cause a core dump.

<li>Change Berkeley DB recovery to not undo operations performed by
logged, but not transaction protected operations.

<li>Change Berkeley DB to no longer generate new locker IDs for every
cursor in non-threaded environments to greatly reduce the possibility
of self-deadlock.

<li>Change the "dbopen" function in the Berkeley DB 1.85 compatibility
API to "__dbopen185" so that we don't collide with the C library where
the C library is version 1.85.

<li>Fix multiple bugs where joins did not correctly work in the presence
of unsorted duplicates or duplicate duplicates.

<li>Fix an erroneous error message by removing diagnostic code which assumed
that closing a cursor closed all locks held by the cursor locker ID.

<li>Fix a bug in the default overflow comparison routine such that if the
overflow comparison test failed because we ran out of key bytes, but were
also on the last page of the overflow item, we would return equality even
though there were remaining bytes in the overflow item.

<li>Fix a bug where read-only databases were registered with the logging
subsystem, causing Berkeley DB recovery to open and close them.

<li>Fix a bug where it was (remotely) possible for a file registered with
the logging subsystem to be incorrectly evaluated as not logging changes.

<li>Fix a bug where the DBcursor-&gt;c_close method didn't correctly release
locks in the Berkeley DB Concurrent Data Store product.

<li>Fix a bug where the read-modify-write flag was set in the DB-&gt;put
method when the database was not configured for locking.

<li>Fix two bugs where the DB-&gt;join and DB-&gt;put methods assumed that the
only possible error was DB_NOTFOUND, thus failing to return deadlock
errors to the application.

<li>Fix a bug where illegal flags to the DB-&gt;cursor method weren't caught.

<li>Fix a bug where illegal flags to the DBcursor-&gt;c_get method weren't
caught.

<li>Fix a bug where the DB_NEXT_DUP flag could be specified with an
uninitialized cursor.

<li>Fix a bug where the DB-&gt;sync and DB-&gt;close methods did not return the
DB_INCOMPLETE error if it occurred.

<li>Fix a bug where off-page duplicate splits could cause cursors to be
mis-positioned.

<li>Fix a bug where partial puts of fixed-length records could cause
data corruption.

<li>Fix a set of potential bugs where the OSF/1 and gcc compilers will
use instructions requiring alignment on unaligned data.

<li>Fix multiple bugs with large numbers of duplicate records including
large numbers of duplicate duplicate records.

</ol>

<h3>Btree Access Method Changes:</h3>
<ol>

<li>The on-disk Btree/Recno format has changed from version 6 to version 7,
required due to a change in the database metadata page.

<li>The Btree cursor routines have been rewritten to use the new cursor
duplicate functionality.  This fixed a couple of bugs where specific
sequences of database operations could cause the cursor to become
mis-positioned in the database and made it less likely that similar bugs
can be introduced in the future.

<li>Applications may now optionally turn off reverse-splitting in Btree
databases.

<li>Btree split operations have been reworked to acquire the metadata page
lock last, and only if the split is going to succeed.  This significantly
increases the possible level of concurrency in small databases.

<li>Fix a bug where database corruption could occur if enough threads
writing to a small database all schedule page splits.

<li>Fix a bug where the DB_SET_RANGE option could return an already
deleted on-page duplicate record to the application.

<li>Fix a bug where an application could core dump if deadlock occurred
during cursor close.

<li>Fix a bug where applications with high-concurrency requirements could
encounter races.

<li>Fix a bug where read serializability was incorrect.

<li>Fix a bug where records of the wrong endian-ness were not correctly
imported.

<li>Fix a bug where an application's cursor could be mis-positioned if
a split failed unexpectedly.

<li>Fix a bug where the DB_SET_RECNO, DB_SET and DB_GET_BOTH flags
could potentially return inexact matches under some circumstances.

<li>Fix a bug where searches could potentially leave pages in the
database locked.

<li>Fix a bug where deleted records could potentially be left in the
database after all cursors were closed.

<li>Fix a bug where deleting the last duplicate entry on a page could
cause an application core dump.

<li>Fix a bug where a page lock could be incorrectly discarded when
moving through on-page duplicate items.

<li>Fix a bug where retrieval of a specific duplicate data item could
cause a core dump.

<li>Fix a bug where DB_CURRENT could erroneously release the cursor's
page lock.

<li>Fix a bug where the DB-&gt;del interface to a Btree database could leave
a cursor mis-positioned under some circumstances.

<li>Fix a memory leak when using the DB-&gt;del interface to delete records.

<li>Fix a bug where specifying the DB_DBT_PARTIAL flag and a dbt.off value
when creating a new record included garbage in the record.

<li>Fix a bug where Btree statistics did not correctly account for
overflow and off-page duplicate pages.

<li>Fix a bug where Btree statistics could fail and leave database
pages locked.

<li>Fix a bug where page LSNs could be lost during recovery of a page
split.

<li>Fix a bug where empty pages in big-endian databases were not
always correctly converted.

<li>Fix a bug where previously deleted records could be accessed on
the page, leading to potentially incorrect behavior.

<li>Fix a bug where on-page duplicates could be corrupted when reading
non-native-endian databases.

</ol>

<h3>Hash Access Method Changes:</h3>
<ol>

<li>The on-disk Hash format has changed from version 5 to version 6,
required due to a change in the database metadata page.

<li>In order to allow hash databases as subdatabases, hash will allocate
groups of contiguous pages.  This may cause some hash databases to appear
much larger than they actually are (that is, they will be sparse files).

<li>Statistics, returned by the DB-&gt;stat method, have been added to the
Hash Access Method.

<li>Fix a bug where initial access of a duplicate data item could cause
future access of other items to fail.

<li>Fix a bug where puts or deletes could cause cursors on the same page to
reference incorrect entries.

<li>Fix a bug where partial gets from on-page duplicates could be wrong.

<li>Fix a set of bugs where error paths could lead to application failure.

<li>Fix a set of bugs where cursors could be mis-positioned after operations
on off-page duplicates or off-page duplicates could be stored in incorrect
sorted order.

<li>Fix a bug where overwriting duplicate items could fail.

<li>Fix a bug where an error return value could be overwritten when
releasing the metadata page.

</ol>

<h3>Queue Access Method Changes:</h3>
None.

<h3>Recno Access Method Changes:</h3>
<ol>

<li>Support read-only backing source files for Recno databases.

<li>Fix a bug where accessing the backing source filename could find
incorrect information or cause a core dump.

<li>Fix a bug where the length of fixed-length Recno records were not
correctly byte-swapped during database load.

<li>Fix a set of related bugs where the DB_DBT_PARTIAL flag was
incorrectly handled when manipulating fixed-length records.

<li>Fix a bug where the key created by the DB_AFTER and DB_BEFORE operations
was not correctly returned.

<li>Fix a set of related bugs where certain sequences of operations could
leave application cursors mis-positioned.

<li>Fix a bug where deleting the last record in a database could leave an
application cursor mis-positioned.

<li>Fix a bug where DB_APPEND returned an error instead of appending to
the database.

<li>Fix a bug where specifying the DB_CURRENT, DB_FIRST or DB_NEXT flags
could fail because insufficient records had been read from the backing file.

<li>Fix a bug where page splits could result in an incorrect previous
page pointer.

<li>Fix a bug where the DB_GET_BOTH flag was permitted for Recno, which
does not support it.

</ol>

<h3>C++ API Changes:</h3>
<ol>
<li>Remove the DbLockTab, DbLog, DbMpool and DbTxnMgr classes, moving
their methods to the DbEnv class.

<li>Replace the set_error_model method with the DB_CXX_NO_EXCEPTIONS flag
to the DbEnv class constructor.

<li>Added constructor with a single flag argument for DbEnv and Db.
Added (nonstatic) open methods to DbEnv, Db.

<li>Methods (such as DbLock::put) that used to have a DbMpool, DbLockTab,
DbLog, or DbTxnMgr pointer argument, now take a DbEnv pointer argument.

<li>Added DbEnv::set_feedback(), DbEnv::set_recovery_init().

<li>Added DbEnv::strerror(), DbEnv::err(), DbEnv::errx()

<li>Added BtrecExample, a Btree record example.

<li>Fix a bug where the error model was not set before the initial
environment was opened.

</ol>

<h3>Java API Changes:</h3>
<ol>

<li>Remove the DbLockTab, DbLog, DbMpool and DbTxnMgr classes, moving
their methods to the DbEnv class.

<li>Added constructor with a single flag argument for DbEnv and Db.
Added (nonstatic) open methods to DbEnv, Db.

<li>Methods (such as DbLock.put) that used to have a DbMpool, DbLockTab,
DbLog or DbTxnMgr argument, now take a DbEnv argument.

<li>Added DbEnvFeedback, DbRecoverInit interfaces that are used as 'callbacks'
with DbEnv.set_feedback(), DbEnv.set_recovery_init().

<li>Added DbEnv.strerror(), DbEnv.err(), DbEnv.errx()

<li>Added DbDeadlockException, DbMemoryException classes to allow catching of
more specific errors.

<li>Added DbHashStat class.

<li>Added BtrecExample, a Btree record example.

<li>Updated AccessExample to illustrate technique of subclassing from Dbt
to handle arbitrary data types, in this case to create a StringDbt class.

</ol>

<h3>Tcl API Changes:</h3>
None.

<h3>XA Resource Manager Changes:</h3>
<ol>
<li>Fix a bug where it was possible to specify both JOIN and RESUME to
the XA start interface.

<li>Fix a bug where the current txn ID was not invalidated after
commit/prepare/abort, as the resource manager process does not call
xa_end.

<li>Fix a bug where the TMRESUME and TMONEPHASE flags were incorrectly
checked in the xa_start interface.

</ol>

<h3>Locking Subsystem Changes:</h3>
<ol>

<li>The lock_detect interface has been modified to optionally return a
count of the number of deadlocks broken.

<li>The lock_detect routine has been modified to break as many deadlocks
as possible during each run instead of returning after breaking a single
deadlock.

<li>The lock subsystem lock_put and lock_vec calls will no longer return
DB_LOCK_NOTHELD or EACCES errors under any circumstances to indicate that
a lock was held by another locker.

<li>The lock_stat function now returns the following additional information:
<ul><ol type=a>
<li>st_lock_id: The last allocated lock ID.
<li>st_maxnlockers: The maximum lockers at any one time.
</ol></ul>
The lock_stat function no longer returns the following information:
<ul><ol type=a>
<li>st_magic: The magic number that identifies a file as a lock file.
<li>st_numobjs: The number of unique objects locked.
<li>st_refcnt: The number of references to the region.
<li>st_version: The version of the lock file type.
</ol></ul>

<li>Lock IDs are now allowed to wrap, rather than being limited to two
billion.

<li>Fix a bug in lock detection where it was possible to lose track of
lockers.

<li>Fix a bug where all locks held on an object were not necessarily
released when DB_LOCK_PUT_OBJ was requested.

<li>Fix a bug where the lock subsystem did not detect a lock conflict if
there was no transaction.

<li>Fix a bug where lock_detect could treat the DB_LOCK_OLDEST and
DB_LOCK_YOUNGEST flags as semantically equivalent.

<li>Fix a bug where locks waiting on an aborted lock were not correctly
promoted at the time of the abort.

<li>Fix a bug where committing a child that held no locks was treated
as an error.

<li>Fix a bug where deadlock detection was done incorrectly in the case
of transactions with nested children.

<li>Fix a bug where parent transactions which had never obtained locks
were incorrectly handled when child transactions committed.

<li>Fix a bug where the library could dump core if multiple deadlock
detectors were running simultaneously.

</ol>

<h3>Logging Subsystem Changes:</h3>
<ol>

<li>The log_register function no longer takes a DBTYPE argument.

<li>Open log files with the Windows FILE_FLAG_WRITE_THROUGH flag
on Windows systems that support it.

<li>Make verbose message "Finding last valid log LSN" optional based
on the DBENV-&gt;set_verbose method.

<li>Modify log to not attempt to allocate unreasonably large buffers
when reading garbage from the log.

<li>Modify log_register to re-use file identifiers to avoid running
out in applications that repeatedly open and close files.

<li>The log_stat function now returns the following additional information:
<ul><ol type=a>
<li>st_lg_bsize: The in-memory log record cache size.
<li>st_wcount: The number of times the log has been written to disk.
<li>st_wcount_fill: The number of times the log has been written to disk
because the in-memory log record cache filled up.
</ol></ul>
The log_stat function no longer returns the following information:
<ul><ol type=a>
<li>st_refcnt: The number of references to the region.
</ol></ul>

<li>Fix a bug where the last-known-LSN-on-disk wasn't being set correctly,
causing the next log_flush call to decide not to flush the current
contents of the buffer to disk, and losing the recovery checkpoint record.

<li>Fix a bug where recovery was not returning the next-to-last checkpoint,
rather it always returned the last checkpoint.

<li>Fix a number of related bugs in file registry, that could lead to
crashes during recovery in applications that repeatedly created, opened
and closed files.
</ol>

<h3>Buffer Pool Subsystem Changes:</h3>
<ol>

<li>The Berkeley DB 3.0.55 release still limits the buffer pool to a 4GB
cache.  However, the method for setting the Berkeley DB buffer cache size,
DBENV-&gt;set_cachesize, has been changed to allow applications to specify
cache sizes larger than 4GB, in preparation for relaxing that limitation.
In addition, applications may specify that multiple pieces of shared
memory are to be used to create the cache, for architectures that do not
support 4GB chunks of contiguous shared memory.

<li>Add a new semantic for memp_sync, if the LSN argument is NULL, flush
the entire buffer cache.

<li>The DB_MPOOL_PRIVATE flag to the db_appinit and memp_open functions
has been removed, replaced by the DB_PRIVATE flag to the DBENV-&gt;open
method.

<li>The memp_stat function no longer returns the following information:
<ul><ol type=a>
<li>st_refcnt: The number of references to the region.
</ol></ul>

<li>Allow for OS-specific functions that preallocate pages in files since
non-POSIX systems (read as "Windows") will give you garbage in the middle
of a file (let's talk about security).

<li>Fix a bug where transaction checkpoint could pin down the entire
buffer cache, starving requests for new buffers.

<li>Fix a bug where systems with large POSIX pthread structures could
allocate too little memory for the default pool.

<li>Fix a bug where highly concurrent systems could end up with incorrect
buffers-to-flush counts during cache syncs.

<li>Fix a bug where the wrong page number could be used when allocating
new pages.

</ol>

<h3>Transaction Subsystem Changes:</h3>
<ol>

<li>The txn_begin function now takes a flag parameter.  This allows
specification of synchronous or asynchronous log flushing behavior on a
per-transaction basis during begin.  Applications may also specify a flag
that causes Berkeley DB to return an error immediately if any lock is
unavailable, rather than waiting for the lock.

<li>The txn_commit function now takes a flag parameter.  This allows
specification of synchronous or asynchronous log flushing behavior on a
per-transaction basis during commit.

<li>The txn_stat function now returns the following additional information:
<ul><ol type=a>
<li>st_maxnactive: The maximum number of active transactions at any one time.
<li>parentid: The st_txnarray structure includes a new field, parentid,
which is the transaction ID of the parent transaction (or 0, if no
parent).
</ol></ul>
The txn_stat function no longer returns the following information:
<ul><ol type=a>
<li>st_refcnt: The number of references to the region.
</ol></ul>

<li>Do not complain about "missing files" during recovery if no operations
were performed on the file.

<li>Free the recovery dispatch table after recovery has completed.

<li>Fix a bug where it was possible to overwrite the checkpoint LSN
during checkpoint.

<li>Fix a bug where an uncommitted child TXN was not committed when its
parent TXN committed.

<li>Fix a bug where nested transactions could be undone in an incorrect
order in the presence of parents making modifications to pages already
modified by the child.
</ol>

<h3>Utility Changes:</h3>
<ol>

<li>Change the output of the db_dump utility to support subdatabases.
The db_load utility supports both the old and new input formats of
the db_dump utility.

<li>Add the -k option to the db_dump utility to support dumping Queue and
Recno databases without altering their key values.

<li>Add the -l and -s options to the db_dump utility to support
subdatabases.

<li>Modify the -d option to the db_dump utility to support different
output formats as part of recovery testing.

<li>Modify the -N option for utilities supporting it to not only not
acquire Berkeley DB mutexes, but to also ignore any other potentially
fatal errors or corruption.

<li>Add the -e option to db_stat, to display per-environment statistics.

<li>Add the -s options to the db_stat utility to support subdatabases.

<li>The db_stat utility will now print out page or record numbers when
displaying lock information for locks obtained by the access methods.

<li>Fix a bug where db_stat could drop core if called incorrectly.

<li>Fix a bug where db_recover would force regions to be created at the
default size instead of the size requested by the application.

<li>Fix bugs where the db_checkpoint and db_deadlock utilities incorrectly
wrote their process IDs to their log files.

<li>Fix bugs where some of the Berkeley DB provided utilities had
inconsistent POSIX signal handling.  Block SIGPIPE on applicable systems
in case the utility output is being piped to another process.
</ol>

<h3>Configuration, Documentation, Portability and Build Changes:</h3>

<ol>

<li>The documentation has been extensively rewritten and enhanced, in
particular, the Berkeley DB Reference Guide has been completed.

<li>The University of California, Berkeley copyright clause relating to
acknowledgement within advertising materials has been deleted from the
Berkeley DB copyrights.

<li>Berkeley DB now optionally builds dynamic shared libraries, see the
--enable-dynamic configuration option for more information.

<li>Add support on Windows for sharing files in system-specific way
supporting the new DB_SYSTEM_MEM.

<li>The Windows/3.1 support has been removed from the distribution.

<li>Java support has been integrated in the project file that is part of
the Visual C++ workspace.

<li>Java support has been integrated into the standard build Makefile.

<li>Changed DLL names to use conventions like libdb30d.dll.  Debug vs.
release libraries and different release numbered libraries can now be
distinguished.

<li>The Solaris/Sparc V9 platform has 8-byte dev_t, ino_t and time_t
values, which required the database file unique ID to be rewritten.

<li>The configuration include file for Berkeley DB has been renamed from
"config.h" to "db_config.h" to minimize the potential for name collision
with other packages.

<li>Some C++ operator=() methods that did not have a return type now have
return type void.

<li>Allow for different JNI's implementation of AttachCurrentThread().

<li>Multiple changes to make it easier for applications to use the
Berkeley DB recovery infrastructure to accomplish recovery of their
own objects.

<li>Separate out the Berkeley DB distribution script that creates the log
marshalling/unmarshalling layer source code so that it can be called
separately by application-specific logging code.

<li>Add a file to the build_unix subdirectory, some Linux releases have
archive exploders that will not extract directories containing only
symbolic links.

<li>The external variable errno support has been extracted out of the main
library source code, and is now encapsulated in a single source file.

<li>Rename the getlong() subroutine to __db_getlong() to eliminate a
potential namespace collision.

<li>Replace all "int" file descriptors with system-independent file
handle structures.

<li>The db_jump_set interface has be replaced with methods on the DBENV
handle.

<li>The db_value_set interface has be replaced with methods on the DBENV
handle.

<li>The Berkeley DB test suite has been rewritten to match the new Tcl API,
and a large number of new tests have been added.

<li>All SCCS Ids yanked to 11.X and copyrights updated to include 1999.

<li>Add Gcc/Alpha assembly mutex support.

<li>Add guard-byte support for allocated memory when DIAGNOSTIC #defined.

<li>Fix a bug in ndbm compatibility API code to correct for the O_WRONLY flag.

<li>Fix a bug in the OS layer where the return of the lseek() call could
be cast to an int.

</ol>

</body>
</html>
